<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2">
<meta name="theme-color" content="#222">
<meta name="generator" content="Hexo 5.4.0">
  <link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon-next.png">
  <link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32-next.png">
  <link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16-next.png">
  <link rel="mask-icon" href="/images/logo.svg" color="#222">

<link rel="stylesheet" href="/css/main.css">


<link rel="stylesheet" href="/lib/font-awesome/css/all.min.css">

<script id="hexo-configurations">
    var NexT = window.NexT || {};
    var CONFIG = {"hostname":"wan-lei8.gitee.io","root":"/","scheme":"Pisces","version":"7.8.0","exturl":false,"sidebar":{"position":"left","display":"post","padding":18,"offset":12,"onmobile":false},"copycode":{"enable":false,"show_result":false,"style":null},"back2top":{"enable":true,"sidebar":false,"scrollpercent":false},"bookmark":{"enable":false,"color":"#222","save":"auto"},"fancybox":false,"mediumzoom":false,"lazyload":false,"pangu":false,"comments":{"style":"tabs","active":null,"storage":true,"lazyload":false,"nav":null},"algolia":{"hits":{"per_page":10},"labels":{"input_placeholder":"Search for Posts","hits_empty":"We didn't find any results for the search: ${query}","hits_stats":"${hits} results found in ${time} ms"}},"localsearch":{"enable":false,"trigger":"auto","top_n_per_article":1,"unescape":false,"preload":false},"motion":{"enable":true,"async":false,"transition":{"post_block":"fadeIn","post_header":"slideDownIn","post_body":"slideDownIn","coll_header":"slideLeftIn","sidebar":"slideUpIn"}}};
  </script>

  <meta name="description" content="文章总体结构本文中，我们将按照如下结构介绍JVM的整体架构和调优参数。">
<meta property="og:type" content="article">
<meta property="og:title" content="JVM调优">
<meta property="og:url" content="https://wan-lei8.gitee.io/2022/01/25/JVM%E8%B0%83%E4%BC%98/index.html">
<meta property="og:site_name" content="程序员西桐">
<meta property="og:description" content="文章总体结构本文中，我们将按照如下结构介绍JVM的整体架构和调优参数。">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="https://mmbiz.qpic.cn/mmbiz_png/2hHcUic5FEwFulovMVicfE95bSz4Yp5Hv8oSUORILC5ptwicicblOxAn8IaK8R2pgW90ic0OdgtibhZDg9eMepQtDNgQ/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1">
<meta property="og:image" content="https://mmbiz.qpic.cn/mmbiz_png/2hHcUic5FEwFulovMVicfE95bSz4Yp5Hv84A11bSphCINM9BIePUGIQFDHootDA9EW0a3bW0L9gHs2ggjO0xWjfQ/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1">
<meta property="og:image" content="https://mmbiz.qpic.cn/mmbiz_png/2hHcUic5FEwFulovMVicfE95bSz4Yp5Hv827UA7giaVibMTIk7Nc5Z5Qzib8T0uJtS7iabAGaGiaktWYy1LDUIPIEd6gg/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1">
<meta property="og:image" content="https://mmbiz.qpic.cn/mmbiz_png/2hHcUic5FEwFulovMVicfE95bSz4Yp5Hv8XZL9WSB3hFvUPib3Mx3zzg5j0ibBW5p1HVr8Ddf2jzMQrvvxXjcp8QnA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1">
<meta property="og:image" content="https://mmbiz.qpic.cn/mmbiz_png/2hHcUic5FEwFulovMVicfE95bSz4Yp5Hv8j84ia8ZibdCJqqm0ToVPt0VE5JCMAeI1xzFSmrrgfMFjiaYQhF6UlWNwQ/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1">
<meta property="og:image" content="https://mmbiz.qpic.cn/mmbiz_png/2hHcUic5FEwFulovMVicfE95bSz4Yp5Hv8uorevgneb1R3qrT3Oicx3yn6aWfgrE3G9fSa6wklUibSq4vAgslBSHew/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1">
<meta property="og:image" content="https://mmbiz.qpic.cn/mmbiz_png/2hHcUic5FEwFulovMVicfE95bSz4Yp5Hv8FlSf0XB8GIR1kmCdHlMDY4yeTxPo51mB5vDbD2VazOu8I3Fej9ebjQ/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1">
<meta property="og:image" content="https://mmbiz.qpic.cn/mmbiz_png/2hHcUic5FEwFulovMVicfE95bSz4Yp5Hv8cpL92lpHUk0f5MKjQo8kUKQoYMrPhogribQKpAuCWOBQ7ebwSXD7Pag/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1">
<meta property="og:image" content="https://mmbiz.qpic.cn/mmbiz_png/2hHcUic5FEwFulovMVicfE95bSz4Yp5Hv8L8PlYs6RMFyicXov1iaDHudR6iaJN7iaEgLfpnDibHImaguC4g7SqMNHJEQ/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1">
<meta property="article:published_time" content="2022-01-25T02:49:54.000Z">
<meta property="article:modified_time" content="2022-01-25T02:50:36.204Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://mmbiz.qpic.cn/mmbiz_png/2hHcUic5FEwFulovMVicfE95bSz4Yp5Hv8oSUORILC5ptwicicblOxAn8IaK8R2pgW90ic0OdgtibhZDg9eMepQtDNgQ/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1">

<link rel="canonical" href="https://wan-lei8.gitee.io/2022/01/25/JVM%E8%B0%83%E4%BC%98/">


<script id="page-configurations">
  // https://hexo.io/docs/variables.html
  CONFIG.page = {
    sidebar: "",
    isHome : false,
    isPost : true,
    lang   : 'zh-CN'
  };
</script>

  <title>JVM调优 | 程序员西桐</title>
  






  <noscript>
  <style>
  .use-motion .brand,
  .use-motion .menu-item,
  .sidebar-inner,
  .use-motion .post-block,
  .use-motion .pagination,
  .use-motion .comments,
  .use-motion .post-header,
  .use-motion .post-body,
  .use-motion .collection-header { opacity: initial; }

  .use-motion .site-title,
  .use-motion .site-subtitle {
    opacity: initial;
    top: initial;
  }

  .use-motion .logo-line-before i { left: initial; }
  .use-motion .logo-line-after i { right: initial; }
  </style>
</noscript>

</head>

<body itemscope itemtype="http://schema.org/WebPage">
  <div class="container use-motion">
    <div class="headband"></div>

    <header class="header" itemscope itemtype="http://schema.org/WPHeader">
      <div class="header-inner"><div class="site-brand-container">
  <div class="site-nav-toggle">
    <div class="toggle" aria-label="切换导航栏">
      <span class="toggle-line toggle-line-first"></span>
      <span class="toggle-line toggle-line-middle"></span>
      <span class="toggle-line toggle-line-last"></span>
    </div>
  </div>

  <div class="site-meta">

    <a href="/" class="brand" rel="start">
      <span class="logo-line-before"><i></i></span>
      <h1 class="site-title">程序员西桐</h1>
      <span class="logo-line-after"><i></i></span>
    </a>
      <p class="site-subtitle" itemprop="description">但行好事，莫问前程</p>
  </div>

  <div class="site-nav-right">
    <div class="toggle popup-trigger">
    </div>
  </div>
</div>




<nav class="site-nav">
  <ul id="menu" class="main-menu menu">
        <li class="menu-item menu-item-home">

    <a href="/" rel="section"><i class="fa fa-home fa-fw"></i>首页</a>

  </li>
        <li class="menu-item menu-item-tags">

    <a href="/tags/" rel="section"><i class="fa fa-tags fa-fw"></i>标签</a>

  </li>
        <li class="menu-item menu-item-categories">

    <a href="/categories/" rel="section"><i class="fa fa-th fa-fw"></i>分类</a>

  </li>
  </ul>
</nav>




</div>
    </header>

    
  <div class="back-to-top">
    <i class="fa fa-arrow-up"></i>
    <span>0%</span>
  </div>


    <main class="main">
      <div class="main-inner">
        <div class="content-wrap">
          

          <div class="content post posts-expand">
            

    
  
  
  <article itemscope itemtype="http://schema.org/Article" class="post-block" lang="zh-CN">
    <link itemprop="mainEntityOfPage" href="https://wan-lei8.gitee.io/2022/01/25/JVM%E8%B0%83%E4%BC%98/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="image" content="/images/avatar.png">
      <meta itemprop="name" content="">
      <meta itemprop="description" content="">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="程序员西桐">
    </span>
      <header class="post-header">
        <h1 class="post-title" itemprop="name headline">
          JVM调优
        </h1>

        <div class="post-meta">
            <span class="post-meta-item">
              <span class="post-meta-item-icon">
                <i class="far fa-calendar"></i>
              </span>
              <span class="post-meta-item-text">发表于</span>
              

              <time title="创建时间：2022-01-25 10:49:54 / 修改时间：10:50:36" itemprop="dateCreated datePublished" datetime="2022-01-25T10:49:54+08:00">2022-01-25</time>
            </span>

          

        </div>
      </header>

    
    
    
    <div class="post-body" itemprop="articleBody">

      
        <h2 id="文章总体结构"><a href="#文章总体结构" class="headerlink" title="文章总体结构"></a>文章总体结构</h2><p>本文中，我们将按照如下结构介绍JVM的整体架构和调优参数。</p>
<span id="more"></span>

<p><img src="https://mmbiz.qpic.cn/mmbiz_png/2hHcUic5FEwFulovMVicfE95bSz4Yp5Hv8oSUORILC5ptwicicblOxAn8IaK8R2pgW90ic0OdgtibhZDg9eMepQtDNgQ/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1" alt="图片"></p>
<h2 id="JVM的分类"><a href="#JVM的分类" class="headerlink" title="JVM的分类"></a>JVM的分类</h2><p>这里，我们先来说说什么是VM吧，VM的中文含义为：虚拟机，指的是使用软件的方式模拟具有完整硬件系统功能、运行在一个完全隔离环境中的完整计算机系统，是物理机的软件实现。</p>
<p>常用的虚拟机有：VMWare、Virtual Box，Java Virtual Machine（JVM，Java虚拟机）。</p>
<p>这里，我们重点聊的就是JVM，Java虚拟机。看下图。</p>
<p><img src="https://mmbiz.qpic.cn/mmbiz_png/2hHcUic5FEwFulovMVicfE95bSz4Yp5Hv84A11bSphCINM9BIePUGIQFDHootDA9EW0a3bW0L9gHs2ggjO0xWjfQ/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1" alt="图片"></p>
<p>这张图看起来还是比较简单的，JVM运行于操作系统之上，操作系统是运行在计算机硬件上的。</p>
<p>关于JVM，其实有很多大厂开发了不同版本的JVM，比较知名的有：Sun HotSpot VM、BEA JRockit VM、IBM J9 VM、 Azul VM、 Apache Harmony、 Google Dalvik VM、 Microsoft JVM等等。</p>
<p>现在使用的比较多的JDK8版本就是Sun HotSpot VM与BEA JRockit VM合并之后开发出的JDK版本。</p>
<h2 id="JVM的构成"><a href="#JVM的构成" class="headerlink" title="JVM的构成"></a>JVM的构成</h2><p>JVM主要由三个子系统构成，分别为：<strong>类加载器子系统、运行时数据区（内存结构）和字节码执行引擎</strong>。</p>
<p><img src="https://mmbiz.qpic.cn/mmbiz_png/2hHcUic5FEwFulovMVicfE95bSz4Yp5Hv827UA7giaVibMTIk7Nc5Z5Qzib8T0uJtS7iabAGaGiaktWYy1LDUIPIEd6gg/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1" alt="图片"></p>
<p>为了更好的理解JVM，我们来看一下JVM的全貌图。</p>
<p><img src="https://mmbiz.qpic.cn/mmbiz_png/2hHcUic5FEwFulovMVicfE95bSz4Yp5Hv8XZL9WSB3hFvUPib3Mx3zzg5j0ibBW5p1HVr8Ddf2jzMQrvvxXjcp8QnA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1" alt="图片"></p>
<p>当我们开发Java程序时，首先会编写.java文件，之后，会将.java文件编译成.class文件。</p>
<p>JVM中，会通过类装载子系统将.class文件的内容装载到JVM的运行时数据区，而JVM的运行时数据区又会分为：<strong>方法区、堆、栈、本地方法栈和程序计数器</strong> 几个部分。</p>
<p>在装载class文件的内容时，会将class文件的内容拆分为几个部分，分别装载到JVM运行时数据区的几个部分。其中，值得注意的是：<strong>程序计数器的作用是：记录程序执行的下一条指令的地址。</strong></p>
<p>方法区也叫作元空间，主要包含了：运行时常量池、类型信息、字段信息、方法信息、类加载器的引用、对应的Class实例的引用等信息。</p>
<p>在JVM中，程序的执行是通过执行引擎进行的，执行引擎会调用本地方法的接口来执行本地方法库，进而完成整个程序逻辑的执行。</p>
<p>我们常说的垃圾收集器是包含在执行引擎中的，在程序的运行过程中，执行引擎会开启垃圾收集器，并在后台运行，垃圾收集器会不断监控程序运行过程中产生的内存垃圾信息，并根据相应的策略对垃圾信息进行清理。</p>
<p><strong>这里，大家需要注意的是：栈、本地方法栈和程序计数器是每个线程运行时独占的，而方法区和堆是所有线程共享的。所以，栈、本地方法栈和程序计数器不会涉及线程安全问题，而方法区和堆会涉及线程安全问题。</strong></p>
<h3 id="方法区（元空间）"><a href="#方法区（元空间）" class="headerlink" title="方法区（元空间）"></a>方法区（元空间）</h3><p>很多小伙伴一看到方法区三个字，脑海中的第一印象可能是存储方法的地方吧。</p>
<p>实则不然，方法区的另一个名字叫作元空间，相信不少小伙伴或多或少的听说过元空间。这个区域是JDK1.8中划分出来的。主要包含：运行时常量池、类型信息、字段信息、方法信息、类加载器的引用、对应的Class实例的引用等信息。方法区中的信息能够被多个线程共享。</p>
<p>例如，在程序中声明的常量、静态变量和有关于类的信息等的引用，都会存放在方法区，而这些引用所指向的具体对象 <strong>一般都会在堆中开辟单独的空间进行存储，也可能会在直接内存中进行存储</strong>。</p>
<p><img src="https://mmbiz.qpic.cn/mmbiz_png/2hHcUic5FEwFulovMVicfE95bSz4Yp5Hv8j84ia8ZibdCJqqm0ToVPt0VE5JCMAeI1xzFSmrrgfMFjiaYQhF6UlWNwQ/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1" alt="图片"></p>
<h3 id="堆"><a href="#堆" class="headerlink" title="堆"></a>堆</h3><p>堆中主要存储的是实际创建的对象，也就是会存储通过new关键字创建的对象，堆中的对象能够被多个线程共享。堆中的数据不需要事先明确生存期，可以动态的分配内存，不再使用的数据和对象由JVM中的GC机制自动回收。<strong>对JVM的性能调优一般就是对堆内存的调优</strong>。</p>
<p>Java中基本类型的包装类：Byte、Short、Integer、Long、Float、Double、Boolean、Character类型的数据是存储在堆中的。</p>
<p>堆一般会被分成年轻代和老年代。而年轻代又会被进一步分为1个Eden区和2个Survivor区。在内存分配上，如果保持默认配置的话，年轻代和老年代的内存大小比例为1 : 2，年轻代中的1个Eden区和2个Survivor区的内存大小比例为：8 : 1 : 1。</p>
<p><img src="https://mmbiz.qpic.cn/mmbiz_png/2hHcUic5FEwFulovMVicfE95bSz4Yp5Hv8uorevgneb1R3qrT3Oicx3yn6aWfgrE3G9fSa6wklUibSq4vAgslBSHew/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1" alt="图片"></p>
<h3 id="栈"><a href="#栈" class="headerlink" title="栈"></a>栈</h3><p>栈一般又叫作线程栈或虚拟机栈，一般存储的是局部变量。在Java中，每个线程都会有一个单独的栈区，每个栈中的元素都是私有的，不会被其他的栈所访问。栈中的数据大小和生存期都是确定的，存取速度比较快。</p>
<p>在Java中，所有的基本数据类型（byte、short、int、long、float、double、boolean、char）和引用变量（对象引用）都是在栈中的。<strong>一般情况下，线程退出或者方法退出时，栈中的数据会被自动清除</strong>。</p>
<p>程序在执行过程中，会在栈中为不同的方法创建不同的栈帧，在栈帧中又包含了：<strong>局部变量表、操作数栈、动态链接和方法出口。</strong></p>
<p><img src="https://mmbiz.qpic.cn/mmbiz_png/2hHcUic5FEwFulovMVicfE95bSz4Yp5Hv8FlSf0XB8GIR1kmCdHlMDY4yeTxPo51mB5vDbD2VazOu8I3Fej9ebjQ/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1" alt="图片"></p>
<p>关于局部变量表、操作数栈、动态链接和方法出口的具体作用，会在《<a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/mp/appmsgalbum?__biz=Mzg4MjU0OTM1OA==&action=getalbum&album_id=2028693320121548800#wechat_redirect">架构师进阶系列</a>》中的后续文章中详细阐述。</p>
<p>栈中一般会存储对象的引用，这些引用所指向的具体对象一般都会在堆中开辟单独的地址空间进行存储，也有可能存储在直接内存中。</p>
<p><img src="https://mmbiz.qpic.cn/mmbiz_png/2hHcUic5FEwFulovMVicfE95bSz4Yp5Hv8cpL92lpHUk0f5MKjQo8kUKQoYMrPhogribQKpAuCWOBQ7ebwSXD7Pag/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1" alt="图片"></p>
<p><strong>注意：这里说的是这些引用所指向的具体对象一般都会在堆中开辟单独的地址空间进行存储，也有可能存储在直接内存中。</strong></p>
<p><strong>因为在JVM中，如果开启了逃逸分析和标量替换，则可能不会再在堆上创建对象，可能会将对象直接分配到栈上，也可能不再创建对象，而是进一步分解对象中的成员变量，将其直接在栈上分配空间并赋值。</strong></p>
<h3 id="本地方法栈"><a href="#本地方法栈" class="headerlink" title="本地方法栈"></a>本地方法栈</h3><p>本地方法栈相对来说比较简单，就是保存native方法进入区域的地址。</p>
<p>例如，在Java中创建线程，调用Thread对象的start()方法时，会通过本地方法start0()调用操作系统创建线程的方法。此时，本地方法栈就会保存start0()方法进入区域的内存地址。</p>
<h3 id="程序计数器"><a href="#程序计数器" class="headerlink" title="程序计数器"></a>程序计数器</h3><p>程序计数器也叫作PC计数器，主要存储的是下一条将要执行的命令的地址。</p>
<h2 id="JVM调优参数"><a href="#JVM调优参数" class="headerlink" title="JVM调优参数"></a>JVM调优参数</h2><p>在JVM中，主要是对堆（新生代）、方法区和栈进行性能调优。各个区域的调优参数如下所示。</p>
<ul>
<li>堆：-Xms、-Xmx</li>
<li>新生代：-Xmn</li>
<li>方法区（元空间）：-XX:MetaspaceSize、-XX:MaxMetaspaceSize</li>
<li>栈（线程）：-Xss</li>
</ul>
<p>为了更加直观的表述，我们可以将JVM的内存区域和对应的调优参数总结成下图所示。</p>
<p><img src="https://mmbiz.qpic.cn/mmbiz_png/2hHcUic5FEwFulovMVicfE95bSz4Yp5Hv8L8PlYs6RMFyicXov1iaDHudR6iaJN7iaEgLfpnDibHImaguC4g7SqMNHJEQ/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1" alt="图片"></p>
<p><strong>在设置JVM启动参数时，需要特别注意方法区（元空间）的参数设置。</strong></p>
<p>关于方法区（元空间）的JVM参数主要有两个：-XX:MetaspaceSize和-XX:MaxMetaspaceSize。</p>
<p><strong>-XX:MetaspaceSize：</strong> 指的是方法区（元空间）触发Full GC的初始内存大小（方法区没有固定的初始内存大小），以字节为单位，默认为21M。达到设置的值时，会触发Full GC，同时垃圾收集器会对这个值进行修改。</p>
<p>如果在发生Full GC时，回收了大量内存空间，则垃圾收集器会适当降低此值的大小；如果在发生Full GC时，释放的空间比较少，则在不超过设置的-XX:MetaspaceSize值或者在没设置-XX:MetaspaceSize的值时不超过21M，适当提高此值。</p>
<p><strong>-XX:MaxMetaspaceSize：</strong> 指的是方法区（元空间）的最大值，默认值为-1，不受堆内存大小限制，此时，只会受限于本地内存大小。</p>
<p><strong>最后需要注意的是：</strong> 调整方法区（元空间）的大小会发生Full GC，这种操作的代价是非常昂贵的。如果发现应用在启动的时候发生了Full GC，则很有可能是方法区（元空间）的大小被动态调整了。</p>
<p><strong>所以，为了尽量不让JVM动态调整方法区（元空间）的大小造成频繁的Full GC，一般将-XX:MetaspaceSize和-XX:MaxMetaspaceSize设置成一样的值。例如，物理内存8G，可以将这两个值设置为256M</strong></p>
<p>最后，我们一起看下在物理内存8G的情况下，启动应用程序时，可以设置的JVM参数。当然，我这里给出的是一些经验值，实际部署到生产环境时，需要经过压测找到最佳的参数值。</p>
<ul>
<li>启动SpringBoot</li>
</ul>
<figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">java</span> ‐Xms<span class="number">2048</span>M ‐Xmx<span class="number">2048</span>M ‐Xmn<span class="number">1024</span>M ‐Xss<span class="number">512</span>K ‐XX:MetaspaceSize=<span class="number">256</span>M ‐XX:MaxMetaspaceSize=<span class="number">256</span>M ‐jar xxx.jar</span><br></pre></td></tr></table></figure>

<ul>
<li>启动Tomcat（Linux）</li>
</ul>
<p>在Tomcat bin目录下catalina.sh文件里配置。</p>
<figure class="highlight routeros"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">‐Xms2048M ‐Xmx2048M ‐Xmn1024M ‐Xss512K ‐XX:<span class="attribute">MetaspaceSize</span>=256M ‐XX:<span class="attribute">MaxMetaspaceSize</span>=256M</span><br></pre></td></tr></table></figure>

<ul>
<li>启动Tomcat（Windows）</li>
</ul>
<p>在Tomcat bin目录下catalina.bat文件里配置。</p>
<figure class="highlight routeros"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">‐Xms2048M ‐Xmx2048M ‐Xmn1024M ‐Xss512K ‐XX:<span class="attribute">MetaspaceSize</span>=256M ‐XX:<span class="attribute">MaxMetaspaceSize</span>=256M</span><br></pre></td></tr></table></figure>

<h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>今天，我们一起学习了JVM的整体架构和调优参数，主要包括：JVM的总体结构、JVM的分类、JVM的构成和调优参数。</p>

    </div>
<div>
  
    <div>
    
        <div style="text-align:center;color: #ccc;font-size:14px;">-------------本文结束<i class="fa fa-paw"></i>感谢您的阅读-------------</div>
    
</div>

  
</div>

    
    
    
        

<div>
<ul class="post-copyright">
  <li class="post-copyright-author">
    <strong>本文作者： </strong>
  </li>
  <li class="post-copyright-link">
    <strong>本文链接：</strong>
    <a href="https://wan-lei8.gitee.io/2022/01/25/JVM%E8%B0%83%E4%BC%98/" title="JVM调优">https://wan-lei8.gitee.io/2022/01/25/JVM调优/</a>
  </li>
  <li class="post-copyright-license">
    <strong>版权声明： </strong>本博客所有文章除特别声明外，均采用 <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh" rel="noopener" target="_blank"><i class="fab fa-fw fa-creative-commons"></i>BY-NC-SA</a> 许可协议。转载请注明出处！
  </li>
</ul>
</div>


      <footer class="post-footer">

        


        
    <div class="post-nav">
      <div class="post-nav-item">
    <a href="/2022/01/24/%E6%95%B0%E6%8D%AE%E5%BA%93%E4%BC%98%E5%8C%96%EF%BC%8C%E5%8F%AF%E4%BB%A5%E4%BB%8E%E5%93%AA%E4%BA%9B%E7%BB%B4%E5%BA%A6%E5%85%A5%E6%89%8B/" rel="prev" title="数据库优化，可以从哪些维度入手">
      <i class="fa fa-chevron-left"></i> 数据库优化，可以从哪些维度入手
    </a></div>
      <div class="post-nav-item">
    <a href="/2022/01/25/%E5%BC%80%E5%8F%91%E5%BF%85%E5%A4%87linux%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/" rel="next" title="开发必备linux命令大全">
      开发必备linux命令大全 <i class="fa fa-chevron-right"></i>
    </a></div>
    </div>
      </footer>
    
  </article>
  
  
  



          </div>
          

<script>
  window.addEventListener('tabs:register', () => {
    let { activeClass } = CONFIG.comments;
    if (CONFIG.comments.storage) {
      activeClass = localStorage.getItem('comments_active') || activeClass;
    }
    if (activeClass) {
      let activeTab = document.querySelector(`a[href="#comment-${activeClass}"]`);
      if (activeTab) {
        activeTab.click();
      }
    }
  });
  if (CONFIG.comments.storage) {
    window.addEventListener('tabs:click', event => {
      if (!event.target.matches('.tabs-comment .tab-content .tab-pane')) return;
      let commentClass = event.target.classList[1];
      localStorage.setItem('comments_active', commentClass);
    });
  }
</script>

        </div>
          
  
  <div class="toggle sidebar-toggle">
    <span class="toggle-line toggle-line-first"></span>
    <span class="toggle-line toggle-line-middle"></span>
    <span class="toggle-line toggle-line-last"></span>
  </div>

  <aside class="sidebar">
    <div class="sidebar-inner">

      <ul class="sidebar-nav motion-element">
        <li class="sidebar-nav-toc">
          文章目录
        </li>
        <li class="sidebar-nav-overview">
          站点概览
        </li>
      </ul>

      <!--noindex-->
      <div class="post-toc-wrap sidebar-panel">
          <div class="post-toc motion-element"><ol class="nav"><li class="nav-item nav-level-2"><a class="nav-link" href="#%E6%96%87%E7%AB%A0%E6%80%BB%E4%BD%93%E7%BB%93%E6%9E%84"><span class="nav-number">1.</span> <span class="nav-text">文章总体结构</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#JVM%E7%9A%84%E5%88%86%E7%B1%BB"><span class="nav-number">2.</span> <span class="nav-text">JVM的分类</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#JVM%E7%9A%84%E6%9E%84%E6%88%90"><span class="nav-number">3.</span> <span class="nav-text">JVM的构成</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#%E6%96%B9%E6%B3%95%E5%8C%BA%EF%BC%88%E5%85%83%E7%A9%BA%E9%97%B4%EF%BC%89"><span class="nav-number">3.1.</span> <span class="nav-text">方法区（元空间）</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#%E5%A0%86"><span class="nav-number">3.2.</span> <span class="nav-text">堆</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#%E6%A0%88"><span class="nav-number">3.3.</span> <span class="nav-text">栈</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#%E6%9C%AC%E5%9C%B0%E6%96%B9%E6%B3%95%E6%A0%88"><span class="nav-number">3.4.</span> <span class="nav-text">本地方法栈</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#%E7%A8%8B%E5%BA%8F%E8%AE%A1%E6%95%B0%E5%99%A8"><span class="nav-number">3.5.</span> <span class="nav-text">程序计数器</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#JVM%E8%B0%83%E4%BC%98%E5%8F%82%E6%95%B0"><span class="nav-number">4.</span> <span class="nav-text">JVM调优参数</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#%E6%80%BB%E7%BB%93"><span class="nav-number">5.</span> <span class="nav-text">总结</span></a></li></ol></div>
      </div>
      <!--/noindex-->

      <div class="site-overview-wrap sidebar-panel">
        <div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
    <img class="site-author-image" itemprop="image" alt=""
      src="/images/avatar.png">
  <p class="site-author-name" itemprop="name"></p>
  <div class="site-description" itemprop="description"></div>
</div>
<div class="site-state-wrap motion-element">
  <nav class="site-state">
      <div class="site-state-item site-state-posts">
          <a href="/archives">
          <span class="site-state-item-count">41</span>
          <span class="site-state-item-name">日志</span>
        </a>
      </div>
  </nav>
</div>
  <div class="links-of-author motion-element">
      <span class="links-of-author-item">
        <a href="https://github.com/yourname" title="GitHub → https:&#x2F;&#x2F;github.com&#x2F;yourname" rel="noopener" target="_blank"><i class="fab fa-github fa-fw"></i>GitHub</a>
      </span>
      <span class="links-of-author-item">
        <a href="/malegod958@163.com" title="E-Mail → malegod958@163.com"><i class="fa fa-envelope fa-fw"></i>E-Mail</a>
      </span>
  </div>
  <div class="cc-license motion-element" itemprop="license">
    <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh" class="cc-opacity" rel="noopener" target="_blank"><img src="/images/cc-by-nc-sa.svg" alt="Creative Commons"></a>
  </div>



      </div>

    </div>
  </aside>
  <div id="sidebar-dimmer"></div>


      </div>
    </main>

    <footer class="footer">
      <div class="footer-inner">
        

        

<div class="copyright">
  
  &copy; 2018 – 
  <span itemprop="copyrightYear">2022</span>
  <span class="with-love">
    <i class="heart"></i>
  </span>
  <span class="author" itemprop="copyrightHolder">万磊</span>
</div>
  <div class="powered-by">

  </div>

        








      </div>
    </footer>
  </div>

  
  
  <script color='' opacity='0.5' zIndex='-1' count='99' src="/lib/canvas-nest/canvas-nest.min.js"></script>
  <script src="/lib/anime.min.js"></script>
  <script src="/lib/velocity/velocity.min.js"></script>
  <script src="/lib/velocity/velocity.ui.min.js"></script>

<script src="/js/utils.js"></script>

<script src="/js/motion.js"></script>


<script src="/js/schemes/pisces.js"></script>


<script src="/js/next-boot.js"></script>




  















  

  

  
	<script type="text/javascript" src="//cdn.bootcss.com/canvas-nest.js/1.0.0/canvas-nest.min.js"></script>
	

<script src="/live2dw/lib/L2Dwidget.min.js?094cbace49a39548bed64abff5988b05"></script><script>L2Dwidget.init({"log":false,"pluginJsPath":"lib/","pluginModelPath":"assets/","pluginRootPath":"live2dw/","tagMode":false});</script></body>
</html>
<!-- 页面点击小红心 -->
<script type="text/javascript" src="/js/src/clicklove.js"></script>
